global gLastSynth,gFirstSynth,gLastSprite,gArp,gProg,gOn,gPosVolSynth,gPosPanSynth
global markerSynthList,synthList,paramList,folderSynthList
if gOn and (folderSynthList <> []) and not(the visible of window "help") then
-- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click
if the visible of sprite 76 then
pass
else
-- prende il click se non abbiamo già marcato 99 synth, se la seq che sta suonando non è già nella markerSynthList e/o se è cambiata anche solo nei parametri
set temp = [field "fieldSynth",gArp,gProg,gPosVolSynth,gPosPanSynth]
if (synthList <> []) and (getLast(markerSynthList) <> synthList or getLast(paramList) <> temp) and (count(markerSynthList) < 99) then
set the memberNum of sprite 61 to the number of member "marker"
updateStage
-- si aggiorna la markerSynthList
set temp = []
repeat with i = 1 to count(synthList)
append temp,getAt(synthList,i)
end repeat
append markerSynthList,temp
-- si aggiorna il visore
-- a visore ho ancora dei contenitori vuoti
set gLastSynth = gLastSynth + 1
if gLastSprite < 73 then
set the memberNum of sprite (gLastSprite + 1) to the number of member string(gLastSynth)
updateStage
if gFirstSynth = 0 then
set gFirstSynth = integer(the name of member the memberNum of sprite 68)
end if
set gLastSprite = gLastSprite + 1
else
-- i contenitori sono già tutti pieni quindi devono slittare tutti i numeri
set start = count(markerSynthList)
set the memberNum of sprite 73 to the number of member string(start)
repeat with i = 72 down to 68
set the memberNum of sprite i to the number of member string(start-(73-i))
updateStage
end repeat
set gFirstSynth = gFirstSynth + 1
end if
-- si aggiorna la paramList
set temp = [field "fieldSynth",gArp,gProg,gPosVolSynth,gPosPanSynth]
if the visible of window "Help" then tell window "help" to go to frame "synth5"
end
on mouseLeave
if the visible of window "Help" then tell window "help" to go to frame "start"
end
on mouseDown
global gArp,gProg,gOn,gPosVolSynth,gPosPanSynth
global markerSynthList,synthList,paramList,folderSynthList
-- se c'è il fieldElencoSynthSalvati aperto non prende il mouseDown
if gOn and not(the visible of sprite 76) and (folderSynthList <> []) and not(the visible of window "help") then
-- prende il click se non abbiamo già marcato 99 synth, se la seq che sta suonando non è già nella markerSynthList e/o se è cambiata anche solo nei parametri
set temp = [field "fieldSynth",gArp,gProg,gPosVolSynth,gPosPanSynth]
if (synthList <> []) and (getLast(markerSynthList) <> synthList or getLast(paramList) <> temp) and (count(markerSynthList) < 99) then
repeat while the mouseDown
set the memberNum of sprite 61 to the number of member "Hmarker"
if the visible of window "Help" then tell window "help" to go to frame "synth4"
end
on mouseLeave
if the visible of window "Help" then tell window "help" to go to frame "start"
end
on mouseDown
global gOn
global synthList,folderSynthList
-- se c'è il fieldElencoSynthSalvati aperto non prende il mouseDown
if gOn and not(the visible of sprite 76) and (synthList <> []) and (folderSynthList <> []) and not(the visible of window "help") then
repeat while the mouseDown
set the memberNum of sprite 62 to the number of member "Hsave"
updateStage
end repeat
end if
end
on mouseUp
global gArp,gProg,gPath,gOn,gPosVolSynth,gPosPanSynth,gWav,gSong
global synthList,synthSaveList,folderSynthList
if gOn and (folderSynthList <> []) and not(the visible of window "help") then
-- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click
if the visible of sprite 76 then
pass
else
if (synthList <> []) then
set the memberNum of sprite 62 to the number of member "save"
updateStage
-- creo il file di testo con le informazioni relative al synth cha sta suonando, in pratica scrivo due righe, una con le informazioni che analoghe alla markerSynthList e l'altra analoga alla paramList
set testo = ""
-- prima riga
repeat with i = 1 to count(synthList)
set testo = testo & getAt(synthList,i) & " "
end repeat
set testo = testo & numToChar(13) & numToChar(10)
-- seconda riga
set testo = testo & field "fieldSynth" & " "
set testo = testo & gArp & " "
set testo = testo & gProg & " "
set testo = testo & gPosVolSynth & " "
set testo = testo & gPosPanSynth & " "
-- ricavo il nome da dare al file in base a quelli già presenti, li leggo nella synthSaveList
set trovato = 1
set i = 1
repeat while trovato
-- set nameFile = "synth" & i & ".txt"
set nameFile = "s" & chars(gSong,5,length(gSong)) & "_" & i & ".txt"
-- con il tasto sinistro compare l'hilite e lo sentiamo
-- con il tasto destro lo spostiamo
on mouseEnter
if the visible of window "Help" then tell window "help" to go to frame "synth1"
end
on mouseLeave
if the visible of window "Help" then tell window "help" to go to frame "start"
end
on mouseDown
global gOn
if (gOn) and not(the visible of sprite 76) and (char 1 of the name of member (the memberNum of sprite the clickOn) <> "m") and not(the visible of window "help") then
-- compare l'hilite intorno al numero
set the locH of sprite 74 to (the locH of sprite the clickOn) + 1
end if
end
on mouseUp
global gOnSynth,gArp,gProg,gPath,gWav,gOn,gPosVolSynth,gPosPanSynth,gSynthSel
global synthList,markerSynthList,arpList,progList,paramList
if gOn and not(the visible of window "help") then
-- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click
if the visible of sprite 76 then
pass
else
-- funziona se ho cliccato in una zona con dentro un numero
if char 1 of the name of member (the memberNum of sprite the clickOn) <> "m" then
-- compare l'hilite intorno al numero
set gSynthSel = integer(the name of member the memberNum of sprite the clickOn)
if not gOnSynth then set gOnSynth = 1
set synthList = []
repeat with k = 1 to count(getAt(markerSynthList,integer(the name of member the memberNum of sprite the clickOn)))
append synthList,getAt(getAt(markerSynthList,integer(the name of member the memberNum of sprite the clickOn)),k)
end repeat
-- hilite delle note
-- se la nota compare sia nella synthList precedente che nella synthList attuale non succede niente
-- se la nota non compare nella synthList precedente e compare nella synthList attuale si accende l'hilite
-- se la nota compare nella synthList precedente e non compare nella synthList attuale si spegne l'hilite
repeat with i = 1 to 3
set start = 12*(i-1) + 3
repeat with j = 1 to 12
set nota = the name of member the memberNum of sprite (start + j)
if char 1 of nota = "y" then
set nota = chars(nota,2,length(nota)) & i
if not getPos(synthList,nota) then
set nota = chars(nota,1,length(nota)-1)
set the memberNum of sprite (start + j) to the number of member nota
updatestage
end if
else
set nota = nota & i
if getPos(synthList,nota) then
set nota = "y" & chars(nota,1,length(nota)-1)
set the memberNum of sprite (start+j) to the number of member nota
updateStage
end if
end if
end repeat
end repeat
set temp = getAt(paramList,integer(the name of member the memberNum of sprite the clickOn))
-- funziona se ho cliccato su una zona con dentro il numero e se il synth scelto non è hilitato
if (char 1 of the name of member (the memberNum of sprite the clickOn) <> "m") and (gSynthSel <> integer(the name of member the memberNum of sprite the clickOn)) then
set the memberNum of sprite 88 to the number of member (the memberNum of sprite the clickOn)
set the ink of sprite 88 to 36
set the visible of sprite the clickOn to false
repeat while the mouseDown
set the locH of sprite 88 = the mouseH
set the locV of sprite 88 = the mouseV
updateStage
end repeat
end if
set prima = 0
end if
end
on rightMouseUp
global gOn,gFirstSynth,gLastSynth,gLastSprite,gSynthSel
global prima
global markerSynthList,posRectList,paramList
if gOn and not(the visible of sprite 76) then
-- se non sono tornata nella posizione iniziale sparisce il synth dal visore e dalla markerSynthList
-- lo sprite torna comunque al suo posto
-- se il numero è vicino alla posizione iniziale torna al suo posto
set prima = prima + 1
if prima = 1 then
set newPos = point(the mouseH,the mouseV)
-- numero è il marker che sposto
put integer(the name of member (the memberNum of sprite the clickOn)) into numero
if inside(newPos,getAt(getAt(posRectList,the clickOn - 67),2)) then
set the loc of sprite the clickOn = getAt(getAt(posRectList,the clickOn - 67),1)
updateStage
else
-- se c'è un marker con hilite ed è più grande del numero che ho spostato faccio shiftare l'hilite a sinistra di un posto
if gSynthSel > numero then
set gSynthSel = gSynthSel - 1
set the locH of sprite 74 to (the locH of sprite 74) - 12
end if
deleteAt markerSynthList,numero
deleteAt paramList,numero
-- non si è fermato vicino alla pos iniziale quindi scompare
-- si riposizionano i synth a visore
repeat with i = 68 to 73
set the memberNum of sprite i to the number of member "m"
end repeat
case(count(markerSynthList)) of
0:
set gLastSynth = 0
set gFirstSynth = 0
set gLastSprite = 67
otherwise
if count(markerSynthList) < 6 then
repeat with i = 1 to count(markerSynthList)
set the memberNum of sprite (67+i) to the number of member string(i)
end repeat
set gLastSprite = gLastSprite - 1
else
repeat with i = 6 down to 1
set the memberNum of sprite (67+i) to the number of member string(count(markerSynthList)-6+i)
end repeat
set gLastSprite = 73
end if
set gFirstSynth = integer(the name of member the memberNum of sprite 68)
set gLastSynth = integer(the name of member the memberNum of sprite gLastSprite)
end case
end if
set the loc of sprite the clickOn = getAt(getAt(posRectList,the clickOn - 67),1)